package com.xzcedu.homework;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author 徐州城
 * @version 1.0
 */
public class Homework01 {
    public static void main(String[] args) throws Exception {

        /**
         * 通过反射修改私有成员变量
         * 1. 定义PrivateTest类，有私有name属性，并属性值为helloKitty
         * 2. 提供getName的公有方法
         * 3. 创建PrivateTest的类，利用Class类得到私有的name属性，修改私有的name属性值，
         *    并调用getName()的方法打印name属性值
         */

        //1. 得到PrivateTest 的Class对象
        Class<?> privateCls = Class.forName("com.xzcedu.homework.PrivateTest");

        //2. 创建对象
        Object o = privateCls.newInstance();

        //3. 得到属性对象
        Field name = privateCls.getDeclaredField("name");
        //因为name为私有 只能使用暴破来修改值
        name.setAccessible(true);
        name.set(o, "张三");

        //4. 得到方法对象 并调用方法
        Method getName = privateCls.getDeclaredMethod("getName");
        System.out.println(getName.invoke(o));
    }
}

class PrivateTest {
    private String name = "helloKitty";

    public String getName() {
        return name;
    }
}
